Defer ,從字面上看就是延遲的意思
顧名思義它有著延遲程式執行的功能
package main
import "fmt"
func first(){
fmt.Println("first")
}
func second(){
fmt.Println("second")
}
func main() {
defer first()
second()
}
執行結果
second
first
如上例所示
原本應該先執行的 first 函式
因為我們用了 defer 去延遲它
所以系統會先執行 second 函式
package main
import "fmt"
func first(){
fmt.Println("first")
}
func second(){
fmt.Println("second")
}
func main() {
defer first()
defer second()
fmt.Println("third")
}
執行結果
third
second
first
若今天有多個同時執行
系統一樣會優先執行未被 defer 的函式
接著會依 defer 的相反順序執行
那 defer 通常會用在哪裡呢
因為 defer 的特性,使得被 defer 的函式會在 return 前最後執行
所以通常都用來釋放資源或是程式最後檢查關閉的動作
有點類似離開房間最後一件事就是鎖門,使用 defer 一定會讓程式記得要 close 這個行為
f, _ := os.Open(filename)
defer f.Close()
參考來源:Go 程式設計導論
openhome.cc